package com.bilibili.service;

import com.bilibili.dto.VideoInfoDto;
import com.bilibili.dto.VideoToJedis;
import com.bilibili.entity.BulletChat;
import com.bilibili.entity.Video;
import com.bilibili.entity.VideoFlag;
import com.bilibili.vo.CommentVo;
import com.bilibili.vo.VideoUserMsgVo;
import com.bilibili.vo.VideoVo;

import java.util.List;

public interface VideoService {
    /**
     * 根据随机id数组获取视频
     *
     * @return video视频的路径和标题集合
     */
    List<Video> getRandomVideo();

    /**
     * 根据随机id获取视频
     *
     * @param id 视频的id
     * @return video视频的路径和标题
     */
    Video getVideoById(Integer id,Integer userId);

    /**
     * 通过任务来指定更新数据库的方法
     */
    void syncRedisCompletequestionToMySql();

    /**
     * @param videoid 传入视频的id
     * @return 通过获取redis里的视频的点击量等数据
     */
    VideoToJedis getVideoToJedisByid(Integer videoid);

    /**
     * @param videoid 传入视频的id
     * @return
     */
    List<BulletChat> getBulletChatByid(Integer videoid);

    /**
     *
     * @param bulletChat 弹幕
     * @return
     */
    Boolean addBulletChat(BulletChat bulletChat);

    /**
     * 获取所有的视频
     * @return
     */
    List<VideoVo> getAllVideo();

    /**
     *
     * @param id 视频id
     * @param changeNumber 点赞数的正负值
     * @return
     */
    Boolean changeThumbsUp(Integer id,Integer changeNumber,Integer userId);


    /**
     *
     * @param id 视频id
     * @param changecollection 收藏数的正负值
     * @return
     */
    Boolean changecollection(Integer id,Integer changecollection,Integer userId);
    /**
     *
     * @param id 视频id
     * @param    changecoin 投币数的正负值
     * @return
     */
    Boolean changecoin(Integer id,Integer changecoin,Integer userId);

    /**
     * 获取旗帜的方法
     * @param id
     * @param userId
     * @return
     */
    VideoFlag  getVideoFlag(Integer id,Integer userId);
    /**
     * 获取视频评论的方法
     * @param id
     * @param userId
     * @return
     */
    List<CommentVo> getAllComment(Integer id, Integer userId);

    /**
     * 通过用户id获取视频页面要用到的信息
     * @param userId
     * @return
     */
    VideoUserMsgVo getUserMsgById(Integer userId);

    /**
     * 发表评论后的插入数据库的方法
     * @param commentVo
     * @return
     */
    Integer sendComment(CommentVo commentVo);

    /**
     * 上传视频的方法
     * @param videoimgurl
     * @param videourl
     * @param userId
     * @return
     */
    Boolean addvideo(String videoimgurl,String videourl,Integer userId,Double videotime,String videoname);

    /**
     * 视频投币后更改硬币的方法
     * @param userId
     * @param coin
     * @return
     */
    Boolean changeUserCoin(Integer userId,Integer coin);

    /**
     * 增加点击量的方法
     * @param videoid
     * @return
     */
    Boolean addvideoPlayback(Integer videoid,Integer userId);

    /**
     * 查询最新视频列表
     *
     * @return 最新视频列表
     * @Author YM
     */
    List<VideoInfoDto> getNewestVideos();

    /**
     * 查询最热视频列表
     *
     * @return 最热视频列表
     * @Author YM
     */
    List<Video> getHotestVideos();

    /**
     * 查询随机视频列表
     *
     * @return 随机视频列表
     * @Author YM
     */
    List<VideoInfoDto> getRandomVideos();
}
